﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace _201206QuanLyBanHang.ChucNang
{
    public partial class FormBanHang : Form
    {

        //Khởi tạo Form Thông báo
        FormThongbao fthongbao = new FormThongbao();
        private SQLCommand msql = new SQLCommand();
        //private MinhConnect mc = new MinhConnect();
        private String MaKhachHang, TenKhachHang, TenCuaHang;
        private int MaNhanVien = 1;
        DataTable dtGiaSP = new DataTable();
        private double GiaSanPham = 0;
        private double GiaChietKhau = 0;
        private bool chedoSua = false;
        double tienmuasp = 0;
        double tienthanhtoan = 0;
        double tiencongnothangtruoc = 0;
        public FormBanHang()
        {
            InitializeComponent();


            #region Son test thu
            //Gán mã nhân viên
            MaNhanVien = 1;
            comboBox1.DataSource = msql.LayDanhSachKhuVuc();
            comboBox1.DisplayMember = "TenKhuVuc";
            comboBox1.ValueMember = "MaKhuVuc";

            comboBox1.SelectedIndex = -1;
            comboBox1.Text = "--Chọn khu vực--";

            if (labelKhachhang.Text == "")
            {
                HideControls(false);
            }
            //Đồ dữ liệu Nhân viên vào cbbNhanVien
            cbbNhanVien.DataSource = msql.LayDanhSachNhanVien();
            cbbNhanVien.DisplayMember = "HoTenNhanVien";
            cbbNhanVien.ValueMember = "MaNhanVien";

            cbbNhanVien.SelectedIndex = -1;
            cbbNhanVien.Text = "--Chọn nhân viên--";
            #endregion
        }

        public void HideControls(bool mode)
        {
            bThem.Enabled = mode;
            bXoa.Enabled = mode;
            bSua.Enabled = mode;
            buttonX1.Enabled = mode;
            btnKhuvuc.Enabled = mode;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ////Gán mã nhân viên
            //MaNhanVien = 1;
            //comboBox1.DataSource = msql.LayDanhSachKhuVuc();
            //comboBox1.DisplayMember = "TenKhuVuc";
            //comboBox1.ValueMember = "MaKhuVuc";

            //comboBox1.SelectedIndex = -1;


            //if (labelKhachhang.Text == "")
            //{
            //    HideControls(false);
            //}
            ////Đồ dữ liệu Nhân viên vào cbbNhanVien
            //cbbNhanVien.DataSource = msql.LayDanhSachNhanVien();
            //cbbNhanVien.DisplayMember = "HoTenNhanVien";
            //cbbNhanVien.ValueMember = "MaNhanVien";
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (comboBox1.SelectedValue.ToString() == "System.Data.DataRowView")
                {
                    //là Null
                    comboBox1.SelectedIndex = -1;
                }
                else
                {
                    dgvdanhsachkhachhang.DataSource = msql.LayDanhSachKhachHang(comboBox1.SelectedValue.ToString());
                    btnKhuvuc.Enabled = true; //Hiển thị nút khi tác động vào combobox
                    //Lấy số lượng Khách hàng theo khu vuc
                    labelsoluongkhachhang.Text = "Có  " + msql.DemSoLuongKhachTheo_KhuVuc(comboBox1.SelectedValue.ToString()) + "  khách hàng";

                }
            }
            catch (Exception)
            {
                //MessageBox.Show(ex.Message);
            }
        }
        private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
        {

        }

        private void dgvdanhsachkhachhang_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                panelBanHang.Visible = false;
                dgvbanhang.Visible = true;
                bXoa.Visible = true;
                bSua.Visible = true;
                int dong = e.RowIndex;
                String makhachhang = "";
                makhachhang = dgvdanhsachkhachhang.Rows[dong].Cells[0].Value.ToString();
                MaKhachHang = makhachhang; //Lấy mã khách hàng vào biến toàn cục
                TenKhachHang = dgvdanhsachkhachhang.Rows[dong].Cells[1].Value.ToString();
                TenCuaHang = dgvdanhsachkhachhang.Rows[dong].Cells[2].Value.ToString();
                dgvbanhang.DataSource = msql.LayThongTinMua(makhachhang);
                labelKhachhang.Text = TenKhachHang + "_" + TenCuaHang;

                //cho hiển thị nút
                HideControls(true);

                //Kiểm tra vấn đề nút Sửa và Xóa
                if (dgvbanhang.RowCount > 0)
                {
                    bSua.Enabled = true;
                    bXoa.Enabled = true;
                    buttonX1.Enabled = true;
                }
                else
                {
                    bSua.Enabled = false;
                    bXoa.Enabled = false;
                    buttonX1.Enabled = false;
                }

            }
            catch (Exception)
            {
                //MessageBox.Show(ex.Message);
            }

        }
        private void Xoarong()
        {
            txtSoLuong.Text = "0";
            txtGhichu.Text = "";
        }

        private void bLuu_Click(object sender, EventArgs e)
        {
           if (txtSoLuong.Text == "")
            {
                //MessageBox.Show("Ô Số lượng không được để trống");
                fthongbao.Thongbao(1, "Cảnh báo", "Ô số lượng không được để trống");
                fthongbao.ShowDialog();
                txtSoLuong.Focus();
                txtSoLuong.SelectAll();
                return;
            }
            if (IsNumber(txtSoLuong.Text) == false)
            {
                //MessageBox.Show("Ô Số lượng phải nhập là Kiểu số");
                fthongbao.Thongbao(1, "Cảnh báo", "Ô số lượng phải nhập giá trị là kiểu số");
                fthongbao.ShowDialog();
                txtSoLuong.Focus();
                txtSoLuong.SelectAll();
                return;
            }
            if (int.Parse(txtSoLuong.Text) <= 0)
            {
                //MessageBox.Show("Số lượng phải lớn hơn 0");
                fthongbao.Thongbao(1, "Cảnh báo", "Số lượng phải lớn hơn 0");
                fthongbao.ShowDialog();
                txtSoLuong.Focus();
                txtSoLuong.SelectAll();
                //txtSoLuong.BackColor = Color.Yellow;
                return;
            }
            //Nếu chế độ là Sửa
            if (chedoSua == true)
            {
                //Thông tin về ThemXoaSua
                FormThongTin ftt = new FormThongTin();
                ftt.ShowDialog();

                KhachHangMuaSP khsua = new KhachHangMuaSP();
                khsua.MaSP = comboSanPham.SelectedValue.ToString();
                khsua.MaKH = int.Parse(MaKhachHang);
                khsua.NgayMua = Convert.ToDateTime(dateNgayMua.Value.ToShortDateString());
                khsua.Soluong = int.Parse(txtSoLuong.Text);
                khsua.Ghichu = txtGhichu.Text;
                khsua.ThanhTien = khsua.Soluong * (GiaSanPham + GiaChietKhau);
                if (msql.CapnhatSoLuong(khsua))
                    dgvbanhang.DataSource = msql.LayThongTinMua(MaKhachHang);
                panelBanHang.Visible = false;
                dgvbanhang.Visible = true;
                bXoa.Visible = true;
                bSua.Visible = true;
                chedoSua = false;//Đưa về lại trạng thái ban đầu

                //Tính Tổng Tiền Khách Mua Sản Phẩm theo tháng
                //Kiểm tra dữ liệu tháng hiện tại đã có trong bảng TONGKHMUASP hay chưa, nếu chưa thì Insert còn lại Update
                khsua.Thang = dateNgayMua.Value.Month.ToString();
                khsua.Nam = dateNgayMua.Value.Year.ToString();
                khsua.ThanhTien = msql.TongTienKH_MuaSP_theoThang(khsua);
                if (msql.KiemTraTongTienKH_MuaSP_theoThang(khsua) == 0) //=0 là chưa có
                {
                    //Insert
                    msql.InsertTongTienKH_MuaSP_theoThang(khsua);
                }
                else
                {
                    //Update
                    msql.UpdateTongTienKH_MuaSP_theoThang(khsua);
                }


                //Tổng tiền Khách nợ (Công Nợ) = (Tổng Mua SP - Tổng thanh toán) theo tháng
                //Lấy công nợ của tháng trước
                if (khsua.Thang == "1")
                {
                    khsua.Thangtruoc = "12";
                    khsua.Namtruoc = (int.Parse(khsua.Nam) - 1).ToString();
                }
                else
                {
                    khsua.Thangtruoc = (int.Parse(khsua.Thang) - 1).ToString();
                    khsua.Namtruoc = khsua.Nam;
                }
                //Tính tổng tien Công nợ= (TổngMuaSP - TổngThanhToan + TổngCongNoThangtruoc)
                tienmuasp = 0;
                tienthanhtoan = 0;
                tiencongnothangtruoc = 0;
                if (msql.KiemTraTongTienKH_MuaSP_theoThang(khsua) != 0)
                    tienmuasp = msql.TongTienKH_MuaSP_theoThang(khsua);
                if (msql.KiemTraTongTienKH_ThanhToan_theoThang(khsua) != 0)
                    tienthanhtoan = msql.TongTienKH_ThanhToan_theoThang(khsua);
                if (msql.KiemTraTongTienKH_CongNo_theoThangtruoc(khsua) != 0)
                    tiencongnothangtruoc = msql.TongTienKH_CongNo_theoThangTruoc(khsua);
                khsua.ThanhTien = tienmuasp - tienthanhtoan + tiencongnothangtruoc;
                //Kiểm tra dũ liệu theo tháng hiện tại đã có trong TONGKHCONGNO hay chưa
                if (msql.KiemTraTongTienKH_CongNo_theoThang(khsua) == 0) //==0 là chưa có
                {
                    //Insert
                    msql.InsertTongTienKH_CongNo_theoThang(khsua);
                }
                else
                {
                    //Update
                    msql.UpdateTongTienKH_CongNo_theoThang(khsua);
                }


                return;
            }




            panelBanHang.Visible = false; //ẩn panel thêm khách hàng mua SP
            KhachHangMuaSP kh = new KhachHangMuaSP();
            kh.MaSP = comboSanPham.SelectedValue.ToString();
            kh.MaKH = int.Parse(MaKhachHang);
            kh.NgayMua = Convert.ToDateTime(dateNgayMua.Value.ToShortDateString());
            
            //Kiểm tra ngày tháng Mua
            //Ngày Mua phải bằng ngày trong bảng thanh toán mới nhất hoặc bằng ngày hiện tại
            //nghĩa là NgàyMua <= Ngày hiện tại
            //nhưng NgàyMua >= NgàyMua mới nhất trong bảng
            if (msql.LayThongTinTuTable_KH_Mua_SP(kh.MaKH) != 0)
            {
                if (double.Parse(msql.KiemTraNgayMuasovoiNgayHientai_khiMuaSP(kh.NgayMua)) >= 0) //= số âm là ngày Mua lớn hơn Ngày hiện tại
                {

                }
                else
                {
                    //MessageBox.Show("Ngày Mua này không hợp, bạn nên chọn ngày hiện tại để nhập liệu", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    fthongbao.Thongbao(2, "Thông tin", "Ngày Mua này đã có trong Sổ");
                    fthongbao.ShowDialog();
                    return;
                }
            }

            //Gọi Datagridview khi thêm mới 
            dgvdanhsachkhachhang_CellClick(null,null);

            kh.MaNV = MaNhanVien;
            kh.Soluong = int.Parse(txtSoLuong.Text);
            kh.Gia_SP_NgayMua = GiaSanPham;
            kh.Gia_Chietkhau_NgayMua = GiaChietKhau;
            kh.Ghichu = txtGhichu.Text;
            kh.ThanhTien = kh.Soluong * (GiaSanPham + GiaChietKhau);



            //Gọi hàm Thêm Số lượng từ class MinhSQL
            if (msql.KiemTraMuaSP(kh) == 0) //=0 là hôm ấy chưa mua
            {
                //Thông tin về ThemXoaSua
                FormThongTin ftt = new FormThongTin();
                ftt.ShowDialog();
                if (msql.ThemSoLuong(kh))
                    dgvbanhang.DataSource = msql.LayThongTinMua(MaKhachHang);
                //Kiểm tra các nút
                if (dgvbanhang.RowCount > 0)
                {
                    bSua.Enabled = true;
                    bXoa.Enabled = true;
                    buttonX1.Enabled = true;
                }
                else
                {
                    bSua.Enabled = false;
                    bXoa.Enabled = false;
                    buttonX1.Enabled = false;
                }

            }
            else
            {
                //MessageBox.Show("Khách hàng đã mua sản phẩm rồi");
                fthongbao.Thongbao(2, "Thông tin", "Khách hàng đã mua rồi");
                fthongbao.ShowDialog();
                return;
            }



            //Tính Tổng Tiền Khách Mua Sản Phẩm theo tháng
            //Kiểm tra dữ liệu tháng hiện tại đã có trong bảng TONGKHMUASP hay chưa, nếu chưa thì Insert còn lại Update
            kh.Thang = dateNgayMua.Value.Month.ToString();
            kh.Nam = dateNgayMua.Value.Year.ToString();
            kh.ThanhTien = msql.TongTienKH_MuaSP_theoThang(kh);
            if (msql.KiemTraTongTienKH_MuaSP_theoThang(kh) == 0) //=0 là chưa có
            {
                //Insert
                msql.InsertTongTienKH_MuaSP_theoThang(kh);
            }
            else
            {
                //Update
                msql.UpdateTongTienKH_MuaSP_theoThang(kh);
            }


            //Tổng tiền Khách nợ (Công Nợ) = (Tổng Mua SP - Tổng thanh toán) theo tháng
            //Lấy công nợ của tháng trước
            if (kh.Thang == "1")
            {
                kh.Thangtruoc = "12";
                kh.Namtruoc = (int.Parse(kh.Nam) - 1).ToString();
            }
            else
            {
                kh.Thangtruoc = (int.Parse(kh.Thang)-1).ToString();
                kh.Namtruoc = kh.Nam;
            }
            //Tính tổng tien Công nợ= (TổngMuaSP - TổngThanhToan + TổngCongNoThangtruoc)
            tienmuasp = 0;
            tienthanhtoan = 0;
            tiencongnothangtruoc = 0;
            if (msql.KiemTraTongTienKH_MuaSP_theoThang(kh) != 0)
                tienmuasp = msql.TongTienKH_MuaSP_theoThang(kh);
            if (msql.KiemTraTongTienKH_ThanhToan_theoThang(kh) != 0)
                tienthanhtoan = msql.TongTienKH_ThanhToan_theoThang(kh);
            if (msql.KiemTraTongTienKH_CongNo_theoThangtruoc(kh) != 0)
                tiencongnothangtruoc = msql.TongTienKH_CongNo_theoThangTruoc(kh);
            kh.ThanhTien = tienmuasp - tienthanhtoan + tiencongnothangtruoc;
            //Kiểm tra dũ liệu theo tháng hiện tại đã có trong TONGKHCONGNO hay chưa
            if (msql.KiemTraTongTienKH_CongNo_theoThang(kh) == 0) //==0 là chưa có
            {
                //Insert
                msql.InsertTongTienKH_CongNo_theoThang(kh);
            }
            else
            {
                //Update
                msql.UpdateTongTienKH_CongNo_theoThang(kh);
            }

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            panelBanHang.Height += 10;
            if (panelBanHang.Height >= 390)
            {
                timer1.Enabled = false;
            }

        }

        private void llClose_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            panelBanHang.Visible = false;
            dgvbanhang.Visible = true;
            bXoa.Visible = true;
            bSua.Visible = true;
            chedoSua = false;
        }



        private void txtTimkiem_KeyUp(object sender, KeyEventArgs e)
        {
            //MessageBox.Show(this.txtTimkiem.Text);
            if (rTheoTenKH.Checked)
            {
                dgvdanhsachkhachhang.DataSource = msql.LayThongtinTimkiemKVvaKH(this.comboBox1.SelectedValue.ToString(), this.txtTimkiem.Text);
                labelsoluongkhachhang.Text = "Có  " + msql.DemSoLuongKhachTheoKVvaKH(this.comboBox1.SelectedValue.ToString(), this.txtTimkiem.Text) + "  khách hàng";
            }
            else
            {
                dgvdanhsachkhachhang.DataSource = msql.LayThongtinTimkiemKVvaCH(this.comboBox1.SelectedValue.ToString(), this.txtTimkiem.Text);
                labelsoluongkhachhang.Text = "Có  " + msql.DemSoLuongKhachTheoKVvaCH(this.comboBox1.SelectedValue.ToString(), this.txtTimkiem.Text) + "  khách hàng";

            }
        }



        private void bThem_Click(object sender, EventArgs e)
        {
            if (chedoSua == false)
            {
                dateNgayMua.Enabled = true;
                comboSanPham.Enabled = true;
            }
            Xoarong();
            panelBanHang.Visible = true;
            //txtNgayMua.Text = dateNgayMua.Value.Day + "/" + dateNgayMua.Value.Month + "/" + dateNgayMua.Value.Year;
            txtNgayMua.Text = String.Format("{0:dd/MM/yyyy}", dateNgayMua.Value);
            dgvbanhang.Visible = false;
            bXoa.Visible = false;
            bSua.Visible = false;
            //do du lieu vao combobox sản phẩm
            comboSanPham.DataSource = msql.LayDanhSachSanPham();
            comboSanPham.DisplayMember = "TenSP";
            comboSanPham.ValueMember = "MaSP";
            //Lay ten khach hang + tên cửa hàng kinh doanh
            lTenKhachhang.Text = TenKhachHang + "_" + TenCuaHang;

            timer1.Enabled = true;
            panelBanHang.Height = 0;
        }

        private void comboSanPham_SelectedValueChanged(object sender, EventArgs e)
        {
            try
            {
                if (comboSanPham.SelectedValue.ToString() == "System.Data.DataRowView")
                {
                    //MessageBox.Show("Null");
                }
                else
                {
                    //MessageBox.Show(msql.LayGiaSanPham(comboSanPham.SelectedValue.ToString()));
                    //MessageBox.Show(msql.LayGiaChietKhau(Convert.ToInt16(MaKhachHang), comboSanPham.SelectedValue.ToString()));
                    //Lấy giá từ Sản phẩm và Chiết khấu
                    GiaSanPham = msql.LayGiaSanPham(comboSanPham.SelectedValue.ToString());
                    GiaChietKhau = msql.LayGiaChietKhau(Convert.ToInt16(MaKhachHang), comboSanPham.SelectedValue.ToString());
                    //MessageBox.Show("" + GiaSanPham + "  " + GiaChietKhau);
                }

                //DataGridView dgv=new DataGridView();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }



        private void txtSoLuong_Click(object sender, EventArgs e)
        {
            txtSoLuong.SelectAll();
        }

        private void buttonX1_Click(object sender, EventArgs e) // Button Thanh toán
        {
            FormThanhToan ftt = new FormThanhToan();
            ftt.MaNhanVien = MaNhanVien;
            ftt.TenKhachHangftt = TenCuaHang;// TenKhachHang;
            if (msql.TrangThaiKH_Thanhtoan(MaKhachHang) == 0) //=0 là ko có trong bảng gán mặc định =0
            {
                ftt.TongTienThanhToan = 0;
            }
            else
            {
                ftt.TongTienThanhToan = msql.TongTienKH_ThanhToan(MaKhachHang);
            }
            double ChuyenTien = msql.TongTienKH_MuaSP(MaKhachHang) - ftt.TongTienThanhToan;
            ftt.StrSoTienNo = msql.ChuyenSangTien(ChuyenTien);  //Tính ra số tiền nợ       
            ftt.MaKH = MaKhachHang;
            ftt.ShowDialog();
        }
        public bool IsNumber(string pValue)
        {
            foreach (Char c in pValue)
            {
                if (!Char.IsDigit(c))
                    return false;
            }
            return true;
        }

        private void bSua_Click(object sender, EventArgs e)
        {
            chedoSua = true;
            //Chỉ được phép Sửa vào ngày hiện tại
            String ngay, soluong, ghichu, loaiSP;
            ngay = dgvbanhang.CurrentRow.Cells["ngaymua"].Value.ToString();
            String[] Strngay = ngay.Split('/');
            ngay = Strngay[1] + "/" + Strngay[0] + "/" + Strngay[2];
            dateNgayMua.Text = ngay;
            soluong = dgvbanhang.CurrentRow.Cells["soluongmua"].Value.ToString();
            loaiSP = dgvbanhang.CurrentRow.Cells["masp"].Value.ToString();
            ghichu = dgvbanhang.CurrentRow.Cells["ghichu_khmsp"].Value.ToString();
            //So sanh với ngày hiện tại, nếu =0 là OK
            //if (double.Parse(msql.KiemTraNgayMuaTheoChinhSuavaXoa_khiMuaSP(ngay)) == 0)
            //{
            //    //Chỉ được phép chỉnh sửa hay xóa trong ngày
            bThem_Click(sender, e);
            comboSanPham.SelectedIndex = int.Parse(loaiSP) - 1;
            txtSoLuong.Text = soluong;
            txtGhichu.Text = ghichu;


            //Disable vài đối tượng
            dateNgayMua.Enabled = false;
            comboSanPham.Enabled = false;



        }
        private void bXoa_Click(object sender, EventArgs e)
        {
            String ngay, masp;
            ngay = dgvbanhang.CurrentRow.Cells["ngaymua"].Value.ToString();
            String[] Strngay = ngay.Split('/');
            ngay = Strngay[1] + "/" + Strngay[0] + "/" + Strngay[2];
            masp = dgvbanhang.CurrentRow.Cells["masp"].Value.ToString();

            fthongbao.ThongbaoXoa(2, "Thông báo", "Bạn có muốn xóa không?");
            fthongbao.ShowDialog();
            if (fthongbao.btnchapnhan == 2)
                return; //Dừng ko xóa
            //Thông tin về ThemXoaSua
            FormThongTin ftt = new FormThongTin();
            ftt.ShowDialog();
            //Xóa
            msql.XoaKhachMuaSP(masp, MaKhachHang, ngay);
            dgvbanhang.DataSource = msql.LayThongTinMua(MaKhachHang);

            if (dgvbanhang.RowCount > 0)
            {
                bSua.Enabled = true;
                bXoa.Enabled = true;
                buttonX1.Enabled = true;
            }
            else
            {
                bSua.Enabled = false;
                bXoa.Enabled = false;
                buttonX1.Enabled = false;
            }

        }

        private void btnKhuvuc_Click(object sender, EventArgs e)
        {
            if (cbbNhanVien.SelectedIndex<0)
            {
                fthongbao.ThongbaoXoa(1, "Thông báo", "Bạn chưa chọn nhân viên!");
                fthongbao.ShowDialog();
                return;
            }
            FormNhapTheoList fntl = new FormNhapTheoList();
            fntl.MaNhanVien = MaNhanVien;
            fntl.TenNhanVien = cbbNhanVien.Text;
            fntl.TenKhuVuc = comboBox1.Text;
            fntl.MaKhuVuc = comboBox1.SelectedValue.ToString();
            fntl.ShowDialog();
        }

        private void cbbNhanVien_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                String MaNV = cbbNhanVien.SelectedValue.ToString();
                if (MaNV != "System.Data.DataRowView")
                {
                    MaNhanVien = int.Parse(MaNV);
                }
            }
            catch { }
            
        }

        private void dateNgayMua_ValueChanged(object sender, EventArgs e)
        {
            txtNgayMua.Text = String.Format("{0:dd/MM/yyyy}", dateNgayMua.Value);
        }


    }
}
